

import request from '../../utils/request';
import { Post, PostDetail, PostPageResponse } from '../../models/post';

/**
 * 获取文章分页列表
 * @param page 页码
 * @param pageSize 每页条数
 * @returns Promise<PaginationResponse<Post>>
 */
export const getPostPage = async (page: number, pageSize: number) => {
  return request.get<PostPageResponse>('/post/page', { page, pageSize });
};

/**
 * 获取文章详情
 * @param id 文章ID
 * @returns Promise<PostDetail>
 */
export const getPostDetail = async (id: number) => {
  return request.get<PostDetail>(`/post/detail/${id}`);
};

/**
 * 创建文章
 * @param data 文章数据
 * @returns Promise<number>
 */
export const createPost = async (data: Partial<Post>) => {
  return request.post<number>('/post', data);
};

/**
 * 更新文章
 * @param id 文章ID
 * @param data 文章数据
 * @returns Promise<boolean>
 */
export const updatePost = async (id: number, data: Partial<Post>) => {
  return request.put<boolean>(`/post/${id}`, data);
};

/**
 * 删除文章
 * @param id 文章ID
 * @returns Promise<boolean>
 */
export const deletePost = async (id: number) => {
  return request.delete<boolean>(`/post/${id}`);
};

/**
 * 获取归档文章数据
 * @returns Promise<Record<number, Record<number, Post[]>>>
 */
export const getArchivePosts = async () => {
  return request.get<Record<number, Record<number, Post[]>>>('/post/archives');
};

/**
 * 根据分类ID获取文章列表
 * @param categoryId 分类ID
 * @returns Promise<Post[]>
 */
export const getPostIdsByCategoryId = async (categoryId: number) => {
  return request.get<Post[]>('/post/getPostsByCategoryId', { categoryId });
};

/**
 * 获取文章详情（包含统计信息）
 * @param id 文章ID
 * @param userId 用户ID（可选）
 * @returns Promise<any>
 */
export const getPostDetailWithStats = async (id: number, userId?: number) => {
  const params = userId ? { userId } : {};
  return request.get<any>(`/post/detail/${id}`, params);
};

/**
 * 根据文章ID列表获取文章详情
 * @param postIds 文章ID列表
 * @returns Promise<Post[]>
 */
export const getPostsByIds = async (postIds: number[]) => {
  return request.get<Post[]>('/post/getPostsByIds', { postIds });
};

/**
 * 获取文章评论列表
 * @param id 文章ID
 * @returns Promise<any[]>
 */
export const getPostComments = async (id: number) => {
  return request.get<any[]>(`/post/${id}/comments`);
};

/**
 * 提交评论
 * @param id 文章ID
 * @param userId 用户ID
 * @param content 评论内容
 * @param parentId 父评论ID
 * @param replyToUserId 被回复用户的ID
 * @returns Promise<string>
 */
export const addComment = async (id: number, userId: number, content: string, parentId?: number, replyToUserId?: number) => {
  const params = new URLSearchParams();
  params.append('userId', userId.toString());
  params.append('content', content);
  if (parentId) {
    params.append('parentId', parentId.toString());
  } else {
    params.append('parentId', '0');
  }
  if (replyToUserId) {
    params.append('replyToUserId', replyToUserId.toString());
  }
  
  return request.post<string>(`/post/${id}/comment?${params.toString()}`);
};

/**
 * 点赞或取消点赞文章（支持匿名用户）
 * @param id 文章ID
 * @param userId 用户ID（可选，匿名用户传undefined）
 * @returns Promise<any>
 */
export const toggleLike = async (id: number, userId?: number) => {
  const params = new URLSearchParams();
  if (userId) {
    params.append('userId', userId.toString());
  }
  return request.post<any>(`/post/like/${id}${params.toString() ? '?' + params.toString() : ''}`);
};

/**
 * 收藏或取消收藏文章（仅登录用户）
 * @param id 文章ID
 * @param userId 用户ID（必填）
 * @returns Promise<any>
 */
export const toggleFavourite = async (id: number, userId: number) => {
  if (!userId) {
    throw new Error('收藏功能需要登录');
  }
  const params = new URLSearchParams();
  params.append('userId', userId.toString());
  return request.post<any>(`/post/favourite/${id}?${params.toString()}`);
};
